package cn.tedu.csmall.cart.webapi.kafka;

import cn.tedu.csmall.commons.pojo.cart.entity.Cart;
import com.google.gson.Gson;
import org.apache.commons.lang.math.RandomUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

// SpringBoot启动时,会实例化这个对象,保存到Spring容器,这样才能实现周期运行
@Component
public class Producer {

    // Spring Kafka框架能自动生成一个操作kafka的对象,并保存带Spring容器
    // 我们需要使用时,直接用@Autowired装配即可
    // KafkaTemplate<[话题类型],[消息类型]>
    @Autowired
    private KafkaTemplate<String,String> kafkaTemplate;

    // 定义一个常量作为话题名称
    public static final String TOPIC_KEY="myCart";

    int i=1;
    //编写一个每隔10秒(10000毫秒)运行一次的方法,来周期性向Kafka发行消息
    @Scheduled(fixedRate = 10000)
    public void sendMessage(){
        System.out.println("准备向Kafka发送消息");
        // 实例化一个Cart对象并赋属性值,用于消息的发送
        Cart cart=new Cart();
        cart.setId(i++);
        cart.setUserId("UU100");
        cart.setCommodityCode("PC100");
        cart.setCount(1+ RandomUtils.nextInt(10));
        cart.setPrice(10+RandomUtils.nextInt(91));
        // 下面就可以执行发送了
        // 将上面cart对象转换为json格式字符串发送
        // {"id":"1","userId":"UU100","count":"6",....}
        // 创建格式转换工具对象
        Gson gson=new Gson();
        // 执行转换
        String json = gson.toJson(cart);
        System.out.println("要发送的json格式字符串为:"+json);
        // 执行发送
        kafkaTemplate.send(TOPIC_KEY,json);
    }

}
